﻿using UnityEngine;
using System.Collections;
//using System;

namespace CFE
{
public class Creator : MonoBehaviour {

	// Use this for initialization
	void Start () {
	GameObject orijinal=new GameObject();
	orijinal.AddComponent<Base>();
	orijinal.AddComponent<Units>();
	orijinal.AddComponent<Kreep>().initialize("Orks",1);
			

	 // И, наконец, получаем доступ к Mesh'у Unity
        Mesh m1 =new Mesh();
         Mesh m =new Mesh();
        // Полностью очищаем Mesh, удаляем все предыдущие вершины
        m.Clear();

        // Создаем массивы, в которых будут располагаться наши новые вершины,
        // треугольники и UV-координаты
        Vector3[] vertices = new Vector3[6];
        int[] triangles    = new int[6];
        Vector2[] uv       = new Vector2[6];

        // На самом деле векторов должно быть 36, но я решил не отрисовывать
        // одну из плоскостей кубика, потому что все нужные мне ребра куба
        // видны и без крышки. Если надо, допишите код самостоятельно :)

        // Тут я поочередно создаю нужные мне плоскости куба.
        // Как видно из кода, я отрисовываю в виде кубика ячейку BSP-дерева.
        // Вся "магия" происходит в методе CreatePlane. См. ниже :)
        CreatePlane(0, ref vertices, ref triangles, ref uv, new Vector3[4] {
                        Vector3.zero,
                        new Vector3(1, 0f, 0f),
                        new Vector3(1, 1, 0f),
                        new Vector3(0f, 1, 0f)}
        );
        CreatePlane(0, ref vertices, ref triangles, ref uv, new Vector3[4] {
                        Vector3.zero,
                        new Vector3(2, 0f, 0f),
                        new Vector3(2, 2, 0f),
                        new Vector3(0f, 2, 0f)}
        );       

        // Все! Массивы векторов готовы, можем записать их обратно в Mesh
        m.vertices = vertices;
        m.uv = uv;
        m.triangles= triangles;


			
	orijinal.AddComponent<MeshFilter>().mesh=m;
	orijinal.AddComponent<MeshRenderer>().material.color=Color.green;
		
			transform.Translate(1,0,0);
			
	GameObject orijinal1=new GameObject();
	orijinal1.AddComponent<Base>();
	orijinal1.AddComponent<Units>();
	orijinal1.AddComponent<Kreep>().initialize("Orks",1);
	orijinal1.AddComponent<MeshFilter>().mesh=m;
	orijinal1.AddComponent<MeshRenderer>().material.color=Color.red;
	//orijinal1.transform.Translate(1,0,0);
	}
	


	//Отрисовка плоскости, заданной четырьмя точками по часовой или против часовой стрелки
	private void CreatePlane(int startIndex, ref Vector3[] vertices, ref int[] triangles, ref Vector2[] uv, Vector3[] points)
	{
        // Как мы знаем, плоскость состоит из двух треугольников:

        // - Первый треугольник
        vertices[startIndex + 0] = points[0];
        vertices[startIndex + 1] = points[1];
        vertices[startIndex + 2] = points[2];
        triangles[startIndex + 0] = startIndex +0;
        triangles[startIndex + 1] = startIndex +1;
        triangles[startIndex + 2] = startIndex +2;
        uv[startIndex + 0] = new Vector2(0,0);
        uv[startIndex + 1] = new Vector2(0,1);
        uv[startIndex + 2] = new Vector2(1,1);
        
                
        // - Второй треугольник
        vertices[startIndex + 3] = points[0];
        vertices[startIndex + 4] = points[2];
        vertices[startIndex + 5] = points[3];
        triangles[startIndex + 3] = startIndex +3;
        triangles[startIndex + 4] = startIndex +4;
        triangles[startIndex + 5] = startIndex +5;
        uv[startIndex + 3] = new Vector2(0,0);
        uv[startIndex + 4] = new Vector2(1,1);
        uv[startIndex + 5] = new Vector2(1,0);
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
}